package input;

import instance.Instance;
import instance.InstanceEj1;
import instance.InstanceEj2;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

import problem.ej2.Valla;

public class Problem2Input implements Input {

        private String inputFile;
        private LinkedList<Instance> instances;
       
        public Problem2Input(String inputFile) {
                this.inputFile = inputFile;
        }
       
        @Override
        public void readFile() throws Exception {
            BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(inputFile)));
            instances = new LinkedList<Instance>();
            while (bufferedReader.ready()) {                //voy leyendo las instancias y las guardo en la lista
                    Instance instance =  readInstance(bufferedReader);
                    instances.add( instance );
            }
           
           bufferedReader.close();
        }

        @Override
        public LinkedList<Instance> getInstances() {
        	
        	return instances;   
        }

        @Override
        public Instance readInstance(BufferedReader bufferedReader) throws Exception {
        	InstanceEj2 subInstance;
    		String string = bufferedReader.readLine();
    			// Leo la primer linea -> El Salto de las Langostas
    		int salto = Integer.parseInt(string);
    		string = bufferedReader.readLine();
    			// Leo la segunda linea -> Las Vallas
    		StringTokenizer st = new StringTokenizer(string, ";");
    		int size = st.countTokens();
    			
    			// Creo las variables que me sirven para guardar la info de las Vallas
    		LinkedList<Valla> instance = new LinkedList<Valla>();
    		int xx;
    		int yy;
    		char dd;
    		int ww;
    		int hh;
    		String next_Tok;
    		
    		while ( st.hasMoreTokens() ){
    				// en next_Tok tengo todos los datos de UNA valla
    			StringTokenizer sub_st = new StringTokenizer(st.nextToken());
    				// creo otro tokenizer para poder recorrer los datos de UNA valla
    				// este tiene como delimitador los espacios en blanco
    			xx = Integer.parseInt( sub_st.nextToken().trim() );
    			yy = Integer.parseInt( sub_st.nextToken().trim() );
    			dd = sub_st.nextToken().trim().charAt(0);
    			ww = Integer.parseInt( sub_st.nextToken().trim() );
    			hh = Integer.parseInt( sub_st.nextToken().trim() );		
    			
    			instance.add(new Valla(xx, yy, dd, ww, hh));
    		}
    		
    		subInstance = new InstanceEj2(instance, size, salto);
            return subInstance;
        }

}
